home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / IEditor / BOOPSI.c < prev    next >
C/C++ Source or Header  |  1997-06-17  |  9KB  |  500 lines

  1. /// Include
  2. #include <stdarg.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7.  
  8. #define INTUI_V36_NAMES_ONLY
  9. #define ASL_V38_NAMES_ONLY
  10. #define CATCOMP_NUMBERS
  11.  
  12. #include <exec/nodes.h>                 // exec
  13. #include <exec/lists.h>
  14. #include <exec/memory.h>
  15. #include <exec/types.h>
  16. #include <intuition/intuition.h>        // intuition
  17. #include <libraries/gadtools.h>         // libraries
  18. #include <libraries/reqtools.h>
  19. #include <clib/exec_protos.h>           // protos
  20. #include <clib/intuition_protos.h>
  21. #include <clib/graphics_protos.h>
  22. #include <clib/dos_protos.h>
  23. #include <clib/locale_protos.h>
  24. #include <clib/gadtools_protos.h>
  25. #include <clib/reqtools_protos.h>
  26. #include <pragmas/exec_pragmas.h>       // pragmas
  27. #include <pragmas/intuition_pragmas.h>
  28. #include <pragmas/graphics_pragmas.h>
  29. #include <pragmas/dos_pragmas.h>
  30. #include <pragmas/locale_pragmas.h>
  31. #include <pragmas/gadtools_pragmas.h>
  32. #include <pragmas/reqtools_pragmas.h>
  33.  
  34.  
  35. #include "DEV_IE:defs.h"
  36. #include "DEV_IE:GUI.h"
  37. #include "DEV_IE:GUI_locale.h"
  38. #include "DEV_IE:Include/expanders.h"
  39. ///
  40. /// Prototipi
  41. static void     ClearBankZone( void );
  42. static void     ShowLong( void );
  43. static void     ShowBool( void );
  44. static void     ShowString( void );
  45. static void     ShowObjects( void );
  46. static void     GetLong( void );
  47. static void     Get_String( void );
  48. static void     PutLong( void );
  49. static void     Put_String( void );
  50. static void     PutBool( void );
  51. static void     BE_AttachList( void );
  52. static void     BE_DetacheList( void );
  53. ///
  54. /// Dati
  55. static struct BTag         *SelTag;
  56. static struct BOOPSIInfo   *EditObj;
  57. static struct Gadget       *BankGList;
  58. static struct IEXNode      *ExpNode;
  59. static BOOL                 B_RetCode;
  60. static UBYTE                CurrentBank;
  61. static void                 ( *TakeValue )( void );
  62.  
  63. static APTR ShowProcs[] = {
  64.     NULL,       // byte
  65.     NULL,       // word
  66.     ShowLong,
  67.     NULL,       // byte ^
  68.     NULL,       // word ^
  69.     NULL,       // long ^
  70.     ShowString,
  71.     NULL,       // string array
  72.     NULL,       // string list
  73.     ShowBool,
  74.     NULL,       // choose
  75.     ShowObjects,
  76.     NULL,       // user struct
  77.     NULL,       // screen
  78. };
  79.  
  80. static APTR GetProcs[] = {
  81.     NULL,       // byte
  82.     NULL,       // word
  83.     GetLong,
  84.     NULL,       // byte ^
  85.     NULL,       // word ^
  86.     NULL,       // long ^
  87.     Get_String,
  88.     NULL,       // string array
  89.     NULL,       // string list
  90.     NULL,       // bool
  91.     NULL,       // choose
  92.     NULL,       // object
  93.     NULL,       // user struct
  94.     NULL,       // screen
  95. };
  96.  
  97. static APTR PutProcs[] = {
  98.     NULL,       // byte
  99.     NULL,       // word
  100.     PutLong,
  101.     NULL,       // byte ^
  102.     NULL,       // word ^
  103.     NULL,       // long ^
  104.     Put_String,
  105.     NULL,       // string array
  106.     NULL,       // string list
  107.     PutBool,
  108.     NULL,       // choose
  109.     NULL,       // object
  110.     NULL,       // user struct
  111.     NULL,       // screen
  112. };
  113. ///
  114.  
  115.  
  116. /// BoopsiEditor
  117. BOOL BoopsiEditor( struct BOOPSIInfo *Obj )
  118. {
  119.     ULONG           ret;
  120.     struct IEXNode *ex;
  121.  
  122.     EditObj = Obj;
  123.  
  124.     ex = IE.Expanders.mlh_Head;
  125.     while( ex->ID != Obj->Kind )
  126.     ex = ex->Node.ln_Succ;
  127.  
  128.     ExpNode = ex;
  129.  
  130.     LayoutWindow( BOOPSIWTags );
  131.     ret = OpenBOOPSIWindow();
  132.     PostOpenWindow( BOOPSIWTags );
  133.  
  134.  
  135.     if( ret )
  136.     DisplayBeep( Scr );
  137.     else {
  138.  
  139.     CurrentBank = (UBYTE)-1;
  140.     TakeValue   = NULL;
  141.     SelTag      = NULL;
  142.  
  143.     BE_AttachList();
  144.  
  145.     while( ReqHandle( BOOPSIWnd, HandleBOOPSIIDCMP ));
  146.  
  147.     ClearBankZone();
  148.     }
  149.  
  150.     CloseBOOPSIWindow();
  151.  
  152.     return( B_RetCode );
  153. }
  154. ///
  155. /// Control functions
  156. BOOL BOOPSIVanillaKey( void )
  157. {
  158.     switch( BOOPSIMsg.Code ) {
  159.  
  160.     case 13:
  161.         return( BE_OkClicked() );
  162.  
  163.     case 27:
  164.         return( BE_AnnullaClicked() );
  165.     }
  166.  
  167.     return( TRUE );
  168. }
  169.  
  170. BOOL BE_OkKeyPressed( void )
  171. {
  172.     return( BE_OkClicked() );
  173. }
  174.  
  175. BOOL BE_AnnullaKeyPressed( void )
  176. {
  177.     return( BE_AnnullaClicked() );
  178. }
  179.  
  180. BOOL BE_CTypeKeyPressed( void )
  181. {
  182.     return( TRUE );
  183. }
  184.  
  185. BOOL BE_LabelClicked( void )
  186. {
  187.     return( TRUE );
  188. }
  189.  
  190. BOOL BE_ClassClicked( void )
  191. {
  192.     return( TRUE );
  193. }
  194.  
  195. BOOL BE_CTypeClicked( void )
  196. {
  197.     return( TRUE );
  198. }
  199.  
  200. BOOL BE_OkClicked( void )
  201. {
  202.     B_RetCode = TRUE;
  203.  
  204.     return( FALSE );
  205. }
  206.  
  207. BOOL BE_AnnullaClicked( void )
  208. {
  209.     B_RetCode = FALSE;
  210.  
  211.     return( FALSE );
  212. }
  213.  
  214. BOOL BE_BoolClicked( void )
  215. {
  216.     SelTag->BoolValue = BOOPSIMsg.Code;
  217.  
  218.     return( TRUE );
  219. }
  220.  
  221. BOOL BE_StringClicked( void )
  222. {
  223.     return( TRUE );
  224. }
  225.  
  226. BOOL BE_ObjectsClicked( void )
  227. {
  228.     return( TRUE );
  229. }
  230.  
  231. BOOL BE_LongClicked( void )
  232. {
  233.     return( TRUE );
  234. }
  235.  
  236. BOOL BE_ImgClicked( void )
  237. {
  238.     return( TRUE );
  239. }
  240.  
  241. BOOL BE_TagsClicked( void )
  242. {
  243.     ULONG           c;
  244.     struct BTag    *tag;
  245.     void            ( *func )( void );
  246.  
  247.     if( TakeValue )
  248.     ( *TakeValue )();
  249.  
  250.     tag = ( struct BTag * )EditObj->Tags.mlh_Head;
  251.  
  252.     for( c = 0; c < BOOPSIMsg.Code; c++ )
  253.     tag = tag->Succ;
  254.  
  255.     SelTag = tag;
  256.  
  257.     if( tag->Type != CurrentBank ) {
  258.  
  259.     ClearBankZone();
  260.  
  261.     if( func = ShowProcs[ tag->Type ])
  262.         ( *func )();
  263.     }
  264.  
  265.     if( func = PutProcs[ tag->Type ])
  266.     ( *func )();
  267.  
  268.     return( TRUE );
  269. }
  270.  
  271. BOOL BE_TagInClicked( void )
  272. {
  273.     return( TRUE );
  274. }
  275.  
  276. BOOL BE_NewTagKeyPressed( void )
  277. {
  278.     return( BE_NewTagClicked() );
  279. }
  280.  
  281. BOOL BE_DelTagKeyPressed( void )
  282. {
  283.     return( BE_DelTagClicked() );
  284. }
  285.  
  286. BOOL BE_NewTagClicked( void )
  287. {
  288.     struct BTag    *tag;
  289.  
  290.     if( TakeValue )
  291.     ( *TakeValue )();
  292.  
  293.     if( tag = AllocObject( IE_BTAG )) {
  294.     struct BOOPSIExp   *exp;
  295.     ULONG               max = 0;
  296.     struct Node        *node;
  297.  
  298.     exp = ExpNode->Base;
  299.  
  300.     for( node = exp->Tags.mlh_Head; node->ln_Succ; node = node->ln_Succ )
  301.         ++max;
  302.  
  303.     if( ApriListaFin( "Select a tag...", 0, &exp->Tags )) {
  304.         WORD    ret;
  305.  
  306.         ret = GestisciListaFin( EXIT, max );
  307.  
  308.         if( ret >= 0 ) {
  309.         struct BOOPSITag   *btag;
  310.         ULONG               c;
  311.  
  312.         BE_DetacheList();
  313.         AddTail(( struct List * )&EditObj->Tags, ( struct Node * )tag );
  314.         BE_AttachList();
  315.  
  316.         SelTag = tag;
  317.  
  318.         btag = (struct BOOPSITag *)exp->Tags.mlh_Head;
  319.  
  320.         for( c = 0; c < ret; c++ )
  321.             btag = btag->Succ;
  322.  
  323.         tag->Type = btag->Type;
  324.         tag->Name = btag->Name;
  325.  
  326.         if( btag->Type != CurrentBank ) {
  327.             void    ( *func )( void );
  328.  
  329.             ClearBankZone();
  330.  
  331.             if( func = ShowProcs[ btag->Type ])
  332.             ( *func )();
  333.  
  334.             TakeValue = GetProcs[ btag->Type ];
  335.         }
  336.  
  337.         SelTag = NULL;
  338.  
  339.         } else
  340.         FreeObject( tag, IE_BTAG );
  341.     }
  342.  
  343.     ChiudiListaFin();
  344.  
  345.     GT_RefreshWindow( BOOPSIWnd, NULL );
  346.  
  347.     } else
  348.     Stat( CatCompArray[ ERR_NOMEMORY ].cca_Str, TRUE, 0 );
  349.  
  350.     return( TRUE );
  351. }
  352.  
  353. BOOL BE_DelTagClicked( void )
  354. {
  355.     if( SelTag ) {
  356.  
  357.     BE_DetacheList();
  358.  
  359.     Remove(( struct Node * )SelTag );
  360.  
  361.     FreeObject( SelTag, IE_BTAG );
  362.  
  363.     BE_AttachList();
  364.     }
  365.  
  366.     return( TRUE );
  367. }
  368. ///
  369. /// BE_DetacheList
  370. void BE_DetacheList( void )
  371. {
  372.     ListTag[1] = (ULONG)~0;
  373.  
  374.     GT_SetGadgetAttrsA( BOOPSIGadgets[ GD_BE_Tags ], BOOPSIWnd,
  375.             NULL, (struct TagItem *)ListTag );
  376. }
  377. ///
  378. /// BE_AttachList
  379. void BE_AttachList( void )
  380. {
  381.     ListTag[1] = (ULONG)&EditObj->Tags;
  382.     GT_SetGadgetAttrsA( BOOPSIGadgets[ GD_BE_Tags ], BOOPSIWnd,
  383.             NULL, (struct TagItem *)ListTag );
  384. }
  385. ///
  386.  
  387. /// ClearBankZone
  388. void ClearBankZone( void )
  389. {
  390.     if( BankGList ) {
  391.  
  392.     RemGadgetBank( BOOPSIWnd, &BOOPSIWBanks, BankGList );
  393.     FreeGadgets( BankGList );
  394.  
  395.     EraseRect( BOOPSIWnd->RPort, 275, YOffset + 3, 609, 124 );
  396.  
  397.     BankGList = NULL;
  398.     }
  399. }
  400. ///
  401.  
  402. /// ShowLong
  403. void ShowLong( void )
  404. {
  405.     if( CurrentBank != TT_LONG ) {
  406.  
  407.     CurrentBank = TT_LONG;
  408.  
  409.     MakeGadgets( &BankGList, BE_LONGGadgets, BE_LONGNGad,
  410.              BE_LONGGTypes, BE_LONGGTags, BE_LONG_CNT );
  411.  
  412.     AddGadgetBank( BOOPSIWnd, &BOOPSIWBanks, BankGList );
  413.  
  414.     TakeValue = GetLong;
  415.     }
  416. }
  417. ///
  418. /// ShowBool
  419. void ShowBool( void )
  420. {
  421.     if( CurrentBank != TT_BOOL ) {
  422.  
  423.     CurrentBank = TT_BOOL;
  424.  
  425.     MakeGadgets( &BankGList, BE_BOOLGadgets, BE_BOOLNGad,
  426.              BE_BOOLGTypes, BE_BOOLGTags, BE_BOOL_CNT );
  427.  
  428.     AddGadgetBank( BOOPSIWnd, &BOOPSIWBanks, BankGList );
  429.     }
  430. }
  431. ///
  432. /// ShowString
  433. void ShowString( void )
  434. {
  435.     if( CurrentBank != TT_STRING ) {
  436.  
  437.     CurrentBank = TT_STRING;
  438.  
  439.     MakeGadgets( &BankGList, BE_STRINGGadgets, BE_STRINGNGad,
  440.              BE_STRINGGTypes, BE_STRINGGTags, BE_STRING_CNT );
  441.  
  442.     AddGadgetBank( BOOPSIWnd, &BOOPSIWBanks, BankGList );
  443.     }
  444. }
  445. ///
  446. /// ShowObjects
  447. void ShowObjects( void )
  448. {
  449.     if( CurrentBank != TT_OBJECT ) {
  450.  
  451.     CurrentBank = TT_OBJECT;
  452.  
  453.     MakeGadgets( &BankGList, BE_OBJECTSGadgets, BE_OBJECTSNGad,
  454.              BE_OBJECTSGTypes, BE_OBJECTSGTags, BE_OBJECTS_CNT );
  455.  
  456.     AddGadgetBank( BOOPSIWnd, &BOOPSIWBanks, BankGList );
  457.     }
  458. }
  459. ///
  460.  
  461. /// GetLong
  462. void GetLong( void )
  463. {
  464.     SelTag->Value = GetNumber( BE_LONGGadgets[ GD_BE_Long ]);
  465. }
  466. ///
  467. /// Get_String
  468. void Get_String( void )
  469. {
  470.     strcpy( SelTag->String, GetString( BE_STRINGGadgets[ GD_BE_String ]));
  471.  
  472. Printf( "%s\n", SelTag->String );
  473. }
  474. ///
  475.  
  476. /// PutLong
  477. void PutLong( void )
  478. {
  479.     IntegerTag[1] = SelTag->Value;
  480.     GT_SetGadgetAttrsA( BE_LONGGadgets[ GD_BE_Long ], BOOPSIWnd,
  481.             NULL, ( struct TagItem * )IntegerTag );
  482. }
  483. ///
  484. /// Put_String
  485. void Put_String( void )
  486. {
  487.     StringTag[1] = (ULONG)SelTag->String;
  488.     GT_SetGadgetAttrsA( BE_STRINGGadgets[ GD_BE_String ], BOOPSIWnd,
  489.             NULL, ( struct TagItem * )StringTag );
  490. }
  491. ///
  492. /// PutBool
  493. void PutBool( void )
  494. {
  495.     CheckedTag[1] = SelTag->BoolValue;
  496.     GT_SetGadgetAttrsA( BE_BOOLGadgets[ GD_BE_Bool ], BOOPSIWnd,
  497.             NULL, ( struct TagItem * )CheckedTag );
  498. }
  499. ///
  500.